#program kok206h
   9 ; un-REM 3380 and 3390 if  you dare - this may cause acrash... no idea why!
  10 DEF FN a(j,k,r)= INT (.625*j+.375*k+.25*r*(k-j)+3*(k-j)*(r-.5)*(r-.5)*(r-.5))
  20 DEF FN t()= DPEEK 23672+65536* PEEK 23674
#autostart
  30 CLEAR %64511: RUN AT %3: tr=%200: LAYER %0: LAYER %2,%1: PALETTE CLEAR : SPRITE CLEAR : PRINT AT %0,%0; CHR$ 30; CHR$ 8;
  40 PROC varsetup(): PROC colsetup(): PROC loadcode()
  50 REG %74,%0: BORDER %0: PAPER %0: INK %15: CLS 
  60 PROC titlescreen()
  70 PROC titleinq() TO i$
  80 IF i$="0" THEN PROC colswitch(): BEEP .5,%0: GO TO %70
  90 IF i$="I" THEN : RUN AT %0: %u=% USR 65422: RUN AT %3: PROC instruct(): GO TO %70
 100 PROC titleclear()
 110 FOR %n=%9 TO %11: BANK %n COPY TO %n+35: NEXT %n 
 115 ; NEW GAME STARTS HERE
 120 FOR %n=%9 TO %11: BANK %n+35 COPY TO %n: NEXT %n
 130 PROC titletwo()
 140 REPEAT : PROC titleinq() TO i$: %i= CODE i$: REPEAT UNTIL %((i=48) OR ((i>=65) AND (i<=70)))
 150 IF %i=48 THEN PROC colswitch(): BEEP .5,%0: GO TO %140
 160 %z=%i-64: PROC titlectrlhlt(%i)
 170 PROC titlethree()
 180 REPEAT : PROC titleinq() TO i$: %i= CODE i$: REPEAT UNTIL %((i>=48) AND (i<=52))
 190 IF %i=48 THEN PROC colswitch(): BEEP .5,%0: GO TO %180
 200 sk=%i-48: PROC titlediffhlt(sk)
 495 ; THE FUN STARTS HERE
 500 CLS : LAYER PALETTE %0: SPRITE PALETTE %0: RANDOMIZE 
 510 ad=%0: %m=5*(sk+1): %t=%0: %e=2: %f=4
 520 FOR %n=%1 TO %f: BANK %41 POKE %395+n,%10: NEXT %n
 995 ; START OF NEW CAVE
1000 TILE %16,%12 AT %0,%13 TO %0,%0
1010 PRINT POINT %107,%178;"T E M P"
1020 FOR %n=%80 TO %174 STEP %2: %i=%4+(2*(n>139))-(4*(n>155)): PLOT INK %i;%n,%186: DRAW INK %i;%0,%5: NEXT %n
1030 IF %t>0 THEN FOR %n=%81 TO %79+(2*t) STEP %2: %i=%12+(2*(n>139))-(4*(n>155)): PLOT INK %i;%n,%186: DRAW INK %i;%0,%5: NEXT %n
1115 ; DISTRIBUTE MINES & GEMS
1130 PROC distmines()
1140 %g=%1+ RND 7: PROC distgems()
1150 TILE %16,%11 AT %0,%2 TO %0,%0
1160 RUN AT %0: %u=% USR 65422+ USR 65422+ USR 65422: FOR q=1 TO 300*de: NEXT q: RUN AT %3
1170 PROC hidemines()
1195 ; ENTER ZAPHOD, BEREFT OF  GEMS
1200 %x=%160: %y=%192: g$="": %w=%0: %v=% DPEEK 23672>>5
1210 SPRITE PRINT %1: SPRITE %0,%x,%y,%0,%1
1235 ; INQUISITION LOOP
1240 PROC tempchk(%v)
1250 IF %t=48 THEN GO TO %2200
1260 %d=%0
1270 IF % ( IN (j[z][1])&191)^160=j[z][2] THEN PROC moveu(): PROC tempchk(%v)
1280 IF %d THEN GO TO %1410
1290 IF % ( IN (j[z][3])&191)^160=j[z][4] THEN PROC moved(): PROC tempchk(%v)
1300 IF %d THEN GO TO %1410
1310 IF %( IN (j[z][5])&191)^160=j[z][6] THEN PROC movel(): PROC tempchk(%v)
1320 IF %d THEN GO TO %1410
1330 IF %( IN (j[z][7])&191)^160=j[z][8] THEN PROC mover(): PROC tempchk(%v)
1340 IF %d THEN GO TO %1410
1350 IF %( IN 65022&191)^160=183 THEN IF %e>0 THEN PROC egabomb()
1360 IF %( IN 49150&191)^160=175 THEN IF %f>0 THEN PROC drink()
1400 GO TO %1240
1405 ; CHECKS AFTER MOVING
1410 PROC tempchk(%v)
1420 %p=%y+(x/16)-2
1425 ; WAS THAT A MINE?
1430 IF % BANK 41 PEEK p=9 THEN GO TO %2000 
1435 ; WAS THAT A GEM?
1440 IF % ( BANK 41 PEEK p>0) AND ( BANK 41 PEEK p<8) THEN PROC gemget() 
1445 ; IS THIS CAVE DONE?
1450 IF %((x=160) AND (y=192)) THEN IF LEN g$>0 THEN GO TO %2500 
1460 PROC tempchk(%v)
1990 GO TO %1240
2000 ; YOUR HEAD A SPLODE
2010 PROC mineflash()
2020 SPRITE %0,%x-8,%y,%2,%1: SPRITE %1,%x+8,%y,%3,%1
2030 RUN AT %0: %u=% USR 65368: FOR q=1 TO 1: NEXT q: RUN AT %3
2040 TILE %8,%1 AT %1,%14 TO %0,%11: TILE %8,%1 AT %1,%14 TO %8,%11: PRINT AT %0,%0;
2050 PROC textbg(%22,%2,%2): PROC animasplode(%21,%176)
2060 FOR q=1 TO 800*de: NEXT q
2070 FOR n=176 TO 16 STEP -4
2080 PROC textasplode(%21,n)
2090 NEXT n
2100 PROC textbg(%2,%2,%2): TILE %14,%1 AT %1,%14 TO %1,%11: TILE %14,%8 AT %1,%14 TO %1,%2
2110 SPRITE %0,%0,%0,%0,%0: SPRITE %1,%0,%0,%0,%0
2120 LAYER PALETTE %1
2130 OVER %1: PROC deathtext(): OVER %0
2140 PRINT POINT %38,%96;"In his final nanosecond before"; POINT %32,%104;"being blown to bits, each of his"; POINT %35,%112;"heads cursed the other's greed."
2150 GO TO %3800
2200 ; FRIED ALIVE
2210 SPRITE %0,%x,%y,%1,%15
2220 RUN AT %0: PLAY "T90M56UX8192W3N9$b$bW0N7$b","7&9f","9&c": RUN AT %3
2230 PROC spritecancel(): TILE %16,%11 AT %0,%13 TO %0,%0: TILE %8,%1 AT %1,%14 TO %0,%11: TILE %8,%1 AT %1,%14 TO %8,%11: PRINT AT %0,%0;
2240 LAYER PALETTE %1
2250 PROC textbg(%2,%2,%2): PROC textfried(%29,%16): SPRITE PRINT %1
2260 OVER %1: PROC deathtext(): OVER %0
2270 PRINT POINT %20,%96;"His body will dry out in the heat..."; POINT %20,%104;"maybe Marvin will find him preserved"; POINT %32,%112;"in a few million years or so...?"
2280 GO TO %3800
2499 STOP 
2500 ; LEAVE THIS CAVE
2505 RUN AT %0: %u=% USR 65422+ USR 65399+ USR 65422: FOR q=1 TO 300*de: NEXT q: RUN AT %3
2510 PROC spritecancel(): TILE %16,%11 AT %0,%13 TO %0,%0: TILE %8,%1 AT %1,%14 TO %0,%11: TILE %8,%1 AT %1,%14 TO %8,%11: PRINT AT %0,%0;
2520 PROC textbg(%2,%2,%3): PROC texthoopy(%28,%16): SPRITE PRINT %1
2530 da=%0: PROC shadowtext("RUNNING TOTAL",%48,%148,%15,%11)
2540 FOR n=%1 TO LEN g$: %n=n
2550 kf= VAL g$(n): k1=a(kf,1): k2=a(kf,2): k3= RND 
2552 ak= INT (.625*k1+.375*k2+.25*k3*(k2-k1)+3*(k2-k1)*(k3-.5)*(k3-.5)*(k3-.5))
2555 PROC cash(ak) TO c$
2560 PRINT POINT %48,%20+(16*n);n$(kf); POINT 210-6* LEN c$,%20+(16*n);c$
2570 TILE %1,%1 AT kf,%0 TO %8,%n+1
2580 da=da+ak: PROC cash(da) TO c$: PROC shadowtext(c$,210-6* LEN c$,%148,%15,%9)
2590 PROC gemsfx(): FOR q=1 TO 400*de: NEXT q
2600 NEXT n: PROC shadowtext("TOTAL IN THIS CAVE",%48,%148,%15,%11): PROC anykeycont()
2610 FOR %n=%32 TO %136: PRINT POINT %48,%n;"                           ": NEXT %n
2620 FOR n=148 TO 60 STEP -4
2630 PROC shadowtext("TOTAL IN THIS CAVE",%48,n,%15,%11): PROC shadowtext(c$,210-6* LEN c$,n,%15,%9): IF n<148 THEN PRINT POINT %48,n+8;"                           "
2640 NEXT n: RUN AT %0: %u=% USR 65399: FOR q=1 TO 100*de: NEXT q: RUN AT %3
2650 ad=ad+da: PROC cash(ad) TO c$
2660 PROC shadowtext("RUNNING TOTAL",%48,%76,%14,%10): PROC shadowtext(c$,210-6* LEN c$,%76,%13,%9)
2665 RUN AT %0: %u=% USR 65399: FOR q=1 TO 100*de: NEXT q: RUN AT %3
2670 PRINT INK %14; POINT %77,%100;"Press   to return"; POINT %68,%108;"to the Heart Of Gold"; POINT %53,%116;"and bank your winnings..."; INK %15; POINT %62,%132;"...or any other key to"; POINT %71,%140;"raid another cavern"
2680 PROC shadowtext("B",%113,%100,%14,%2)
2685 RUN AT %0: %u=% USR 65422: RUN AT %3
2690 REPEAT : i$= INKEY$ : REPEAT UNTIL i$<>""
2700 IF i$="b" OR i$="B" THEN GO TO %3000
2710 PROC spritecancel()
2720 te=%t: tn=te-25+(5*sk): IF tn<0 THEN tn=0
2725 %t=tn
2730 %m=%m+1: IF %(m>50) THEN %m=%50
2790 GO TO %1000
3000 ; CASH IN YOUR CHIPS
3010 RUN AT %0: %u=% USR 65422+ USR 65399+ USR 65422: FOR q=1 TO 300*de: NEXT q: RUN AT %3
3020 PROC cash(ad) TO c$
3030 DIM s(4): PROC hiscarray()
3070 PROC spritecancel(): TILE %16,%11 AT %0,%13 TO %0,%0: TILE %8,%1 AT %1,%14 TO %0,%11: TILE %8,%1 AT %1,%14 TO %8,%11: PRINT AT %0,%0;
3080 PROC textbg(%2,%2,%4): TILE %14,%1 AT %1,%14 TO %1,%11: TILE %14,%8 AT %1,%14 TO %1,%2
3090 LAYER PALETTE %1
3100 PROC textfreeyow(%52,%16): SPRITE PRINT %1
3110 SPRITE %0,%64,%76,%0,%1: SPRITE %1,%240,%76,%1,%1
3120 TILE %1,%1 AT %10,%0 TO %2,%8: TILE %1,%1 AT %10,%0 TO %13,%8
3130 PRINT POINT %62,%44;"Sass that hoopy frood,"; POINT %176,%52;"!"; POINT %53,%68;"He's only gone and looted"; POINT 92+3* LEN c$,%76;"worth of gems"; POINT %32,%84;"from the"; POINT %218,%84;"!"
3140 PROC shadowtext("Zaphod Beeblebrox",%74,%52,%11,%1): PROC shadowtext("Katakombs of Kakrafoon",%86,%84,%14,%6): OVER %1: PROC shadowtext(c$,86-3* LEN c$,%76,%13,%9): OVER %0
3150 IF ad>s(sk) THEN PROC shadowtext("A NEW BEST SCORE FOR THIS LEVEL!",%32,%100,%11,%3): ELSE PROC shadowtext("MOST SUCCESSFUL RAIDS:",%62,%100,%12,%4)
3160 FOR n=%1 TO %4
3170 INK 14-n: IF n=3 THEN INK %14
3180 PRINT POINT %68,108+(8*n);"L";n;":"
3190 PROC cash(s(n)) TO c$
3200 PRINT POINT 188-6* LEN c$,108+(8*n);c$
3210 NEXT n: INK %15
3220 PRINT OVER %1; POINT %102,108+(8*sk);"->"; POINT %106,108+(8*sk);"-"
3230 IF ad>s(sk) THEN PROC newhisc(sk)
3300 PROC hhggending()
3310 FOR %n=%12 TO %13: PRINT AT %n,%3;" "; TAB %39;" ": NEXT %n: FOR %n=%14 TO %19: PRINT AT %n,%9;" "; TAB %33;" ": NEXT %n
3330 PRINT POINT %60,%100;"Press   to leave Zaphod"; POINT %66,%108;"alone for excitement,"; POINT %66,116;"adventure and really "; POINT %87,%124;"wild things..."
3340 PRINT POINT %63,%132;"...or any other key to"; POINT %60,%140;"go back into the caves!": PROC shadowtext("Q",%96,%100,%10,%2)
3350 %w=%1: %q=%0
3360 REPEAT 
3370 SPRITE %0,%64,%76,%w&1,%1: SPRITE %1,%240,%76,%(!w&1),%1
3380 ;TILE %1,%1 AT %10,%0 TO %2,%8-(w&1): TILE %1,%1 AT %10,%0 TO %13,%7+(w&1)
3390 ;TILE %1,%1 AT %0,%0 TO %2,%7+(w&1): TILE %1,%1 AT %0,%0 TO %13,%8-(w&1)
3420 %q=%q+1: IF %q=59 THEN %q=%0: %w=%w+1
3430 i$= INKEY$ 
3440 REPEAT UNTIL i$<>""
3450 GO TO %3820
3800 ; PRESS Q TO DIE FOREVER
3810 REPEAT : i$= INKEY$ : REPEAT UNTIL i$<>""
3820 IF i$="q" OR i$="Q" THEN GO TO %3900
3830 RUN AT %0: %u=% USR 65422: RUN AT %3
3840 SPRITE PRINT %0: PROC spritecancel(): CLS : LAYER PALETTE %0
3850 GO TO %120
3900 ; I DON'T WANNA
3910 SPRITE PRINT %0: PROC spritecancel()
3920 FOR %n=%1 TO %8: FOR %m=%1 TO %256
3930 %x=% RND 16: %y=% RND 12: %g=% RND 32
3940 TILE %1,%1 AT %11-(g=0),%0 TO %x,%y
3950 NEXT %m
3960 RUN AT %0: %u=% USR 65442: RUN AT %3
3970 NEXT %n
4242 PRINT CHR$ 30; CHR$ 8; AT %23,%7;::::::::::::::::::::::::::::::::::::::::: PLAY "X6000000000" 
5000 ;******************** PROCS
5010 DEFPROC colswitch()
5015 LOCAL %r
5020 %r=% REG 67: REG %67,%((!r)&12)|(r&243)
5030 ENDPROC 
5035 ;--------------------------
5040 DEFPROC moveu()
5045 LOCAL n,%p
5050 IF %y<=48 THEN ENDPROC 
5060 FOR n=%1 TO %4: %y=%y-4: %w=%w+1: SPRITE %0,%x,%y,%w&1,%1: BEEP bd,p(n): FOR %p=%1 TO bp*de: NEXT %p: NEXT n
5070 %w=%w+1: %d=1: SPRITE %0,%x,%y,%w&1,%1
5080 ENDPROC 
5085 ;--------------------------
5090 DEFPROC moved()
5095 LOCAL n,%p
5100 IF %((y>=176) AND (x<>160)) THEN ENDPROC 
5110 IF %y>=192 THEN ENDPROC 
5120 FOR n=%1 TO %4: %y=%y+4: %w=%w+1: SPRITE %0,%x,%y,%w&1,%1: BEEP bd,p(n): FOR %p=%1 TO bp*de: NEXT %p: NEXT n
5130 %w=%w+1: %d=1: SPRITE %0,%x,%y,%w&1,%1
5140 ENDPROC 
5145 ;--------------------------
5150 DEFPROC movel()
5155 LOCAL n,%p
5160 IF %((y>176) OR (x<=48)) THEN ENDPROC 
5170 FOR n=%1 TO %4: %x=%x-4: %w=%w+1: SPRITE %0,%x,%y,%w&1,%1: BEEP bd,p(n): FOR %p=%1 TO bp*de: NEXT %p: NEXT n
5180 %w=%w+1: %d=1: SPRITE %0,%x,%y,%w&1,%1
5190 ENDPROC 
5195 ;--------------------------
5200 DEFPROC mover()
5205 LOCAL n,%p
5210 IF %((y>176) OR (x>=256)) THEN ENDPROC 
5220 FOR n=%1 TO %4: %x=%x+4: %w=%w+1: SPRITE %0,%x,%y,%w&1,%1: BEEP bd,p(n): FOR %p=%1 TO bp*de: NEXT %p: NEXT n
5230 %w=%w+1: %d=1: SPRITE %0,%x,%y,%w&1,%1
5240 ENDPROC 
5245 ;--------------------------
5250 DEFPROC distmines()
5255 LOCAL %n,%r,%c,%p
5260 FOR %n=%0 TO %141: BANK %41 POKE %n+49,% BANK 41 PEEK (n+225): NEXT %n
5270 FOR %n=1 TO %m
5280 REPEAT 
5290 %r=%1+ RND 8: %c=%1+ RND 14: %p=%16*(r+2)+c
5300 REPEAT UNTIL % BANK 41 PEEK p<>8
5310 BANK %41 POKE %p,%8
5320 NEXT %n
5330 ENDPROC 
5335 ;--------------------------
5340 DEFPROC distgems()
5345 LOCAL %n,%r,%c,%p,%k,%q
5350 FOR %n=1 TO %g
5360 REPEAT 
5370 %r=%1+ RND 9: %c=%1+ RND 14: %p=%16*(r+2)+c
5380 REPEAT UNTIL %( BANK 41 PEEK p=0) OR ( BANK 41 PEEK p>8)
5390 %k=1: %q=%1+ RND 42: %k=%k+(q>15)+(q>25)+(q>32)+(q>36)+(q>39)+(q>41)
5400 BANK %41 POKE %p,%k
5410 NEXT %n
5420 ENDPROC 
5425 ;--------------------------
5430 DEFPROC hidemines()
5435 LOCAL %n,%q,%m
5440 %q=0: FOR %n=%49 TO %190
5450 IF % BANK 41 PEEK n=8 THEN FOR %m=%0 TO %6 STEP %3: BEEP .1,% SGN {m+q-48}: NEXT %m: BANK %41 POKE %n,%9: TILE %14,%9 AT %1,%3 TO %1,%1: %q=%q+1
5460 NEXT %n
5470 ENDPROC 
5475 ;--------------------------
5480 DEFPROC tempchk(%u)
5485 LOCAL %q,%x,%i
5490 %q=% DPEEK 23672>>5
5500 IF %q<=u THEN ENDPROC 
5510 %v=%q: BEEP .1,-24
5520 %t=%t+1: %x=%79+(2*t): %i=%12+(2*(x>139))-(4*(x>155)): PLOT INK %i;%x,%186: DRAW INK %i;%0,%5
5530 ENDPROC 
5535 ;--------------------------
5560 DEFPROC egabomb()
5565 LOCAL %n
5570 %e=%e-1: BANK %41 POKE %385+(2*e),%0: BANK %41 POKE %384+(2*e),%0: TILE %4,%1 AT %0,%24 TO %0,%11
5580 PLAY "T90UX4000W0M56N9bX1000W3b"
5590 FOR %n=%1 TO %20-(s*4): PROC colswitch(): PLAY "T90UX666W0M56N5b": NEXT %n
5640 ENDPROC 
5645 ;--------------------------
5650 DEFPROC drink()
5655 LOCAL %n,%k,%s,%q,q
5670 %f=%f-1: BANK %41 POKE %396+f,%0: TILE %4,%1 AT %12,%24 TO %12,%11
5680 RUN AT %0: %u=% USR 65399+ USR 65399+ USR 65399: RUN AT %3
5690 %s=sk: %k=%(15*(s=1))+(10*(s=2))+(7*(s=3))+(5*(s=4)): %q=% SGN {t-k}: IF % SGN {q<0} THEN %q=%0
5700 FOR n=%79+(2*t) TO %81+(2*q) STEP -2: PLOT INK %0;n,%186: DRAW INK %0;%0,%5
5710 BEEP .1,-36: FOR q=1 TO 100*de: NEXT q
5720 NEXT n
5730 %t=%q
5740 ENDPROC 
5745 ;--------------------------
5750 DEFPROC gemget()
5755 LOCAL q
5760 q=% BANK 41 PEEK p: g$=g$+ STR$ q: BANK %41 POKE %p,%0
5770 PROC gemsfx()
5780 TILE %14,%9 AT %1,%3 TO %1,%1
5790 ENDPROC 
5795 ;--------------------------
5800 DEFPROC cash(c)
5805 LOCAL c$
5810 c$= STR$ c
5820 IF LEN c$>6 THEN c$=c$( TO LEN c$-6)+","+c$( LEN c$-5 TO )
5830 IF LEN c$>3 THEN c$=c$( TO LEN c$-3)+","+c$( LEN c$-2 TO )
5840 c$="`"+c$
5850 ENDPROC =c$
5855 ;--------------------------
5860 DEFPROC gemsfx()
5870 PLAY "T60M35O6N10BA&","O6N11&B&","V8O6N3A"
5880 ENDPROC 
5885 ;--------------------------
5890 DEFPROC mineflash()
5895 LOCAL %x,%y,%n,%m,q
5900 %y=%p>>4: %x=%p-(16*y): %y=%y-2
5910 FOR %n=%1 TO %8: FOR %m=%8 TO %9
5920 TILE %1,%1 AT %m,%0 TO %x,%y: FOR q=1 TO 100*de: NEXT q
5930 NEXT %m: NEXT %n
5940 ENDPROC 
5945 ;--------------------------
5950 DEFPROC deathtext()
5960 PRINT POINT %50,%48;"The"; POINT %38,%56;"have claimed another victim...": PROC shadowtext("Katakombs of Kakrafoon",%74,%48,%14,%6)
5970 PRINT POINT %44,%72;"Here lies"; POINT %206,%72;","; POINT %29,%80;"former President of the Universe.": PROC shadowtext("Zaphod Beeblebrox",%104,%72,%11,%1)
5980 PRINT POINT %26,%128;"Press   to leave Zaphod as dead as"; POINT %23,%136;"Hotblack Desiato - or any other key"; POINT %35,%144;"to resurrect him and try again!": PROC shadowtext("Q",%62,%128,%10,%2)
5990 ENDPROC 
5995 ;--------------------------
6000 DEFPROC texthoopy(%x,%y)
6005 LOCAL %n,%a,%b,%s
6010 RESTORE %6041: FOR %n=%1 TO %14
6020 READ %a: READ %b: READ %s
6030 SPRITE %n,%x+32+a,%y+32+b,%s,%1
6040 NEXT %n
6041 DATA %0,%0,%22
6042 DATA %12,%0,%18
6043 DATA %36,%0,%9
6044 DATA %48,%0,%4
6045 DATA %60,%0,%21
6046 DATA %76,%8,%30
6047 DATA %96,%0,%22
6048 DATA %108,%0,%18
6049 DATA %132,%0,%11
6050 DATA %144,%0,%18
6051 DATA %156,%0,%18
6052 DATA %168,%0,%19
6053 DATA %180,%0,%28
6054 DATA %196,%0,%31
6060 ENDPROC 
6065 ;--------------------------
6070 DEFPROC textasplode(%x,%y)
6075 LOCAL %n,%a,%b,%s
6080 RESTORE %6971: FOR %n=%2 TO %16
6090 READ %a: READ %b: READ %s
6100 SPRITE %n,%x+32+a,%y+32+b,%s,%1
6110 NEXT %n
6120 ENDPROC 
6125 ;--------------------------
6130 DEFPROC textfried(%x,%y)
6135 LOCAL %n,%a,%b,%s
6140 RESTORE %6171: FOR %n=%1 TO %15
6150 READ %a: READ %b: READ %s
6160 SPRITE %n,%x+32+a,%y+32+b,%s,%1
6170 NEXT %n
6171 DATA %0,%0,%9
6172 DATA %12,%0,%21
6173 DATA %26,%0,%12
6174 DATA %36,%0,%8
6175 DATA %48,%0,%7
6176 DATA %72,%0,%15
6177 DATA %86,%0,%12
6178 DATA %96,%0,%14
6179 DATA %108,%0,%8
6180 DATA %132,%0,%5
6181 DATA %144,%0,%4
6182 DATA %156,%0,%6
6183 DATA %168,%0,%18
6184 DATA %180,%0,%17
6185 DATA %196,%0,%31
6190 ENDPROC 
6195 ;--------------------------
6200 DEFPROC textfreeyow(%x,%y)
6205 LOCAL %n,%a,%b,%s
6210 RESTORE %6241: FOR %n=%2 TO %14
6220 READ %a: READ %b: READ %s
6230 SPRITE %n,%x+32+a,%y+32+b,%s,%1
6240 NEXT %n
6241 DATA %0,%0,%9
6242 DATA %12,%0,%21
6243 DATA %24,%0,%8
6244 DATA %36,%0,%8
6245 DATA %48,%0,%8
6246 DATA %60,%0,%8
6247 DATA %72,%0,%28
6248 DATA %84,%0,%18
6249 DATA %96,%0,%18
6250 DATA %108,%0,%18
6251 DATA %120,%0,%18
6252 DATA %132,%0,%26
6253 DATA %148,%0,%31
6320 ENDPROC 
6325 ;--------------------------
6330 DEFPROC hiscarray()
6335 LOCAL n,l,m,h
6340 FOR n=%1 TO %4: %n=n
6350 l=% BANK 42 PEEK (8177+(3*n))
6360 m=% BANK 42 PEEK (8178+(3*n))
6370 h=% BANK 42 PEEK (8179+(3*n))
6380 s(n)=l+256*m+65536*h
6390 NEXT n
6400 ENDPROC 
6405 ;--------------------------
6410 DEFPROC newhisc(%k)
6415 LOCAL l,q,m,h,%i,j$
6420 h= INT (ad/65536): q=ad-65536*h: m= INT (q/256): l=q-256*m 
6430 BANK %42 POKE %8177+(3*k),l
6440 BANK %42 POKE %8178+(3*k),m
6450 BANK %42 POKE %8179+(3*k),h
6460 %i=%14-k: IF %k=3 THEN %i=%14
6470 kf=%k: OVER %1: PROC shadowtext("L"+ STR$ (kf)+":",%68,%108+(8*k),%i,%i-8)
6480 l=% BANK 42 PEEK (8177+(3*k))
6490 m=% BANK 42 PEEK (8178+(3*k))
6500 h=% BANK 42 PEEK (8179+(3*k))
6510 PROC cash(l+256*m+65536*h) TO j$
6520 PRINT OVER %0; POINT 188-6* LEN j$,%108+(8*k);"                "( TO LEN j$)
6530 PROC shadowtext(j$,188-6* LEN j$,%108+(8*k),%i,%i-8)
6540 OVER %0
6550 SAVE "tilespr.bin" BANK %42
6560 ENDPROC 
6765 ;--------------------------
6770 DEFPROC reset()
6775 LOCAL %n
6780 FOR %n=%8180 TO %8191: BANK %42 POKE %n,%0: NEXT %n
6790 ENDPROC 
6795 ;--------------------------
6800 DEFPROC animasplode(%x,%y)
6805 LOCAL %n,%a,%b,%s,%p,q
6810 RESTORE %6971: %p=20*de
6820 FOR %n=%2 TO %5: READ %a: READ %b: READ %s: SPRITE %n,%x+32+a,%y+32+b,%s,%1: NEXT %n
6830 RUN AT %0: %u=% USR 65442: FOR q=%1 TO %p: NEXT q: RUN AT %3
6840 FOR %n=%6 TO %9: READ %a: READ %b: READ %s: SPRITE %n,%x+32+a,%y+32+b,%s,%1: NEXT %n
6850 RUN AT %0: %u=% USR 65442: FOR q=%1 TO %p: NEXT q: RUN AT %3
6860 READ %a: READ %b: READ %s: SPRITE %10,%x+32+a,%y+32+b,%s,%1
6870 RUN AT %0: %u=% USR 65442: FOR q=%1 TO %p: NEXT q: RUN AT %3
6880 FOR %n=%11 TO %16: READ %a: READ %b: READ %s: SPRITE %n,%x+32+a,%y+32+b,%s,%1: NEXT %n
6890 RUN AT %0: %u=% USR 65442: FOR q=%1 TO %p: NEXT q: RUN AT %3
6971 DATA %0,%0,%28
6972 DATA %12,%0,%18
6973 DATA %24,%0,%24
6974 DATA %36,%0,%21
6975 DATA %60,%0,%11
6976 DATA %72,%0,%8
6977 DATA %84,%0,%4
6978 DATA %96,%0,%7
6979 DATA %120,%0,%4
6980 DATA %144,%0,%22
6981 DATA %156,%0,%19
6982 DATA %168,%0,%15
6983 DATA %180,%0,%18
6984 DATA %192,%0,%7
6985 DATA %204,%0,%8
6990 ENDPROC 
7005 ;--------------------------
7010 DEFPROC varsetup()
7015 LOCAL %n,n,%m
7020 RESTORE %7030
7030 DIM p(4): FOR n=%1 TO %4: READ p(n): NEXT n
7035 DATA -24,-17,-20,-13: ;note pitch when moving
7040 FOR %m=%1 TO %6: FOR %n=%1 TO %8: READ %j[m][n]: NEXT %n: NEXT %m
7041 DATA %64510,%190,%65022,%190,%57342,%189,%57342,%190
7042 DATA %49150,%187,%32766,%187,%65278,%189,%65278,%187
7043 DATA %31,%8,%31,%4,%31,%2,%31,%1
7044 DATA %61438,%189,%61438,%187,%61438,%175,%61438,%183
7045 DATA %63486,%183,%63486,%187,%63486,%190,%63486,%189
7046 DATA %61438,%183,%61438,%175,%63486,%175,%61438,%187
7050 DIM n$(7,10): FOR n=%1 TO %7: READ n$(n): NEXT n
7055 DATA "Amethyst","Topaz","Aquamarine","Emerald","Sapphire","Ruby","Diamond"
7060 DIM a(7,2): FOR n=%1 TO %7: READ a(n,1): READ a(n,2): NEXT n
7065 DATA %10,%400,%25,%500,%50,%1000,%250,%15000,%500,%20000,%750,%50000,%1000,100000
7170 bd=.25: bp=%180: de=.75
7190 ENDPROC 
7195 ;--------------------------
7200 DEFPROC colsetup()
7205 LOCAL %n,%c
7210 PALETTE FORMAT %15: PALETTE DIM %8: PALETTE OVER tr
7220 RESTORE %7230: FOR %n=%0 TO %31: READ %c: BANK %43 POKE %n,%c: NEXT %n
7230 DATA %0,%2,%160,%162,%20,%22,%180,%182,%0,%3,%224,%227,%28,%31,%252,%255: ;      Spectrum colours
7240 DATA %0,%2,%160,%162,%20,%22,%172,%182,%109,%111,%237,%239,%125,%127,%253,%255: ; EGA colours
7250 LAYER PALETTE %1 BANK %43,%16: LAYER PALETTE %0 BANK %43,%0
7260 LAYER OVER %0
7270 ENDPROC 
7275 ;--------------------------
7280 DEFPROC loadcode()
7290 BANK %42 ERASE : BANK %41 ERASE 
7300 LOAD "mc206h.bin" CODE %65368,%113
7310 LOAD "tilespr.bin" BANK %42
7320 LOAD "tilemap.bin" BANK %41,%0,%400
7330 TILE BANK %42: TILE DIM %41,%0,%16,%16
7340 SPRITE BANK %42,%8192,%0,%32
7350 SPRITE PALETTE %1 BANK %43,%16: SPRITE PALETTE %0 BANK %43,%0: SPRITE PRINT %1
7360 LOAD "chars6.bin" CODE %64512,%768
7370 DPOKE %23606,%64256: PRINT AT %0,%0; CHR$ 31; CHR$ 6;: POKE %23658,%0
7380 RESTORE %7385: FOR %n= USR "q" TO USR "q"+7: READ %d: POKE %n,%d: NEXT %n
7385 DATA %0,%0,%24,%60,%60,%24,%0,%0
7390 ENDPROC 
7395 ;--------------------------
7400 DEFPROC titleinq()
7405 LOCAL %z,%q,i$
7410 %z=%1: PROC titlegems(%z): %q=%0
7420 REPEAT 
7430 %q=%q+1: IF %q=499 THEN %q=%0: %z=%z+1: PROC titlegems(%z): IF %z=7 THEN %z=%0
7440 i$= INKEY$ 
7450 REPEAT UNTIL i$<>""
7460 IF CODE i$>96 AND CODE i$<123 THEN i$= CHR$ ( CODE i$-32) 
7470 ENDPROC =i$
7475 ;--------------------------
7480 DEFPROC titleclear()
7485 LOCAL %n
7490 FOR %n=%13 TO %21: PRINT CHR$ 30; CHR$ 8; AT %n,%1; TAB %30;" ": NEXT %n
7500 ENDPROC 
7505 ;--------------------------
7510 DEFPROC titlegems(%r)
7515 LOCAL %n
7520 FOR %n=%1 TO %5: TILE %1,%1 AT %r,%0 TO %1,%n: %r=%r+1: %r=%r-(7*(r=8)): NEXT %n
7530 FOR %n=%1 TO %5: TILE %1,%1 AT %r,%0 TO %14,%6-n: %r=%r+1: %r=%r-(7*(r=8)): NEXT %n
7540 ENDPROC 
7545 ;--------------------------
7550 DEFPROC titlectrlhlt(%a)
7555 LOCAL %x,%y,%l,%c,p
7560 %x=%(12*(a<=67))+(126*(a>=68)): %y=%(8*(a-50))-(24*(a>=68)): %l=%(107*(a<=67))+(119*(a>=68))
7570 FOR %c=%0 TO %7: PLOT OVER %1;%x,%y+c: DRAW OVER %1;%l,%0: p=% SGN {c-16}: BEEP .04,p: NEXT %c
7580 ENDPROC 
7585 ;--------------------------
7590 DEFPROC titlediffhlt(%a)
7595 LOCAL %x,%c,p
7600 %x=%23+(36*a)
7610 FOR %c=%0 TO %7: PLOT OVER %1;%x,%168+c: DRAW OVER %1;%29,%0: p=% SGN {c-16}: BEEP .04,p: NEXT %c
7620 ENDPROC 
7625 ;--------------------------
7630 DEFPROC shadowtext(a$,%x,%y,%f,%b)
7640 PRINT POINT %x,%y;"                                          "( TO LEN a$)
7650 PRINT INK %b; POINT %x+1,%y+1;a$; INK %f; OVER %1; POINT %x,%y;a$
7660 ENDPROC 
7665 ;--------------------------
7670 DEFPROC anykeycont()
7680 PRINT POINT %41,%184; INVERSE %1;"  PRESS ANY KEY TO CONTINUE  "
7690 REPEAT : REPEAT UNTIL INKEY$ <>""
7700 PRINT AT %23,%0; TAB %40;" ";
7710 ENDPROC 
7715 ;--------------------------
7720 DEFPROC textbg(%r,%c,%i)
7725 LOCAL x$,%b
7730 x$="": PRINT AT %0,%0; CHR$ 30; CHR$ 8; INK %i; AT %r,%c;x$; AT %r+1,%c;x$; AT %0,%0; CHR$ 30; CHR$ 6;
7740 %b=%i+8: PLOT INK %b;%8*c,%8*r
7750 DRAW INK %b;%223,%0: DRAW INK %b;%0,%15: DRAW INK %b;% SGN {-223},%0: DRAW INK %b;%0,% SGN {-15}
7760 ENDPROC 
7765 ;--------------------------
7770 DEFPROC spritecancel()
7775 LOCAL %n
7780 SPRITE PRINT %0: FOR %n=0 TO 31: SPRITE %n,%0,%0,%0,%0: NEXT %n
7790 ENDPROC 
7795 ;--------------------------
7995 ;*********** BANKABLE PROCS
8000 DEFPROC titlescreen()
8005 LOCAL x$
8010 x$="": PRINT INK %6; AT %0,%0;x$; AT %23,%0;x$
8020 FOR %n=%1 TO %22: PRINT INK %6; AT %n,%0;""; AT %n,%31;"": NEXT %n
8030 INK %14: PROC titlestripes()
8040 INK %6: PROC titleq(%49,%25)
8050 INK %14: PROC titleq(%48,%24)
8060 INK %15: PRINT CHR$ 30; CHR$ 6; POINT %14,%104;"A GAME BY JIM WATERMAN FOR CSSCGC 2024"; POINT %32,%120;"THE SEQUEL TO "; INK %14;"MINES OF MAGRATHEA"
8070 PRINT OVER %1; POINT %23,%128; INK %15;"BY PAUL E. COLLINS ("; INK %10;"SP"; INK %14;"EC"; INK %12;"TR"; INK %13;"UM"; INK %15;", 2021)"; POINT %32,%136;"& JIM WATERMAN ("; POINT %182,%136;", 2022)"
8080 PRINT INK %10; POINT %23,%152;"NOTE:"; INK %7;" Joo Janta 200 Super-Chromatic"; POINT %23,%160;"Peril Sensitive Sunglasses will not"; POINT %20,%168;"provide any assistance in this game."
8090 PROC shadowtext("SAM COUPE",%128,%136,%7,%9): PROC titlegems(%1): PROC hhggtheme()
8100 FOR %n=%19 TO %21: PRINT AT %n,%2;" "; TAB %40;" ": NEXT %n
8180 PRINT INK %15; POINT %23,%152;"PRESS "; INK %14;"ZERO"; INK %15;" TO TEST COLOUR SWITCHING"; POINT %56,%160;"PRESS "; INK %12;"I"; INK %15;" FOR INSTRUCTIONS"; POINT %44,%168;"OR ANY OTHER KEY TO CONTINUE"
8190 ENDPROC 
8195 ;--------------------------
8200 DEFPROC titletwo()
8205 LOCAL n
8210 PRINT AT %0,%0; CHR$ 30; CHR$ 6; POINT %59,%104; INVERSE %1;" SELECT YOUR CONTROLS: "
8220 FOR n=%15 TO %17: PRINT INK %14; AT n,%3; CHR$ (n+50);":"; AT n,%22; CHR$ (n+53);":": NEXT n
8230 PRINT AT %15,%6;"KEYBOARD QAOP"; AT %15,%25;"SINCLAIR PORT 1"
8240 PRINT AT %16,%6;"KEYBOARD ZXKM"; AT %16,%25;"SINCLAIR PORT 2"
8250 PRINT AT %17,%6;"KEMPSTON (31)"; AT %17,%25;"CURSOR KEYS"
8260 ENDPROC 
8265 ;--------------------------
8270 DEFPROC titlethree()
8280 PRINT POINT %50,%152; INVERSE %1;" SELECT YOUR SKILL LEVEL: "; INVERSE %0; POINT %17,%168;"EASY > "; INK %13;"  1   "; INK %12;"  2   "; INK %14;"  3   "; INK %10;"  4  "; INK %15;" < HARD"
8290 PRINT OVER %1; POINT %45,%168;"-"; POINT %205,%168;"-"
8300 ENDPROC 
8305 ;--------------------------
8310 DEFPROC blk(%x,%y)
8320 PLOT %x,%y: DRAW %3,%0: DRAW %0,%1: DRAW % SGN {-3},%0
8330 ENDPROC 
8335 ;--------------------------
8340 DEFPROC sideblk(%x,%y)
8350 PLOT %x,%y: DRAW %0,%3: DRAW %1,%0: DRAW %0,% SGN {-3}: DRAW %1,%0: DRAW %0,%3
8360 ENDPROC 
8365 ;--------------------------
8370 DEFPROC longhblk(%x,%y,%l)
8380 %l=%l-1: PLOT %x,%y: DRAW %l,%0: DRAW %0,%1: DRAW % SGN {-l},%0: DRAW %0,%1: DRAW %l,%0: DRAW %0,%1: DRAW % SGN {-l},%0
8390 ENDPROC 
8395 ;--------------------------
8400 DEFPROC longvblk(%x,%y,%l)
8410 %l=%l-1: PLOT %x,%y: DRAW %0,%l: DRAW %1,%0: DRAW %0,% SGN {-l}: DRAW %1,%0: DRAW %0,%l: DRAW %1,%0: DRAW %0,% SGN {-l}
8420 ENDPROC 
8425 ;--------------------------
8430 DEFPROC kq(%x,%y)
8435 LOCAL %n
8440 PROC longvblk(%x,%y,24)
8450 FOR %n=%0 TO %5: PROC blk(%x+4+n,%y+10-(2*n)): NEXT %n
8460 FOR %n=%0 TO %5: PROC blk(%x+4+n,%y+12+(2*n)): NEXT %n
8470 ENDPROC 
8475 ;--------------------------
8480 DEFPROC aq(%x,%y)
8485 LOCAL %n
8490 FOR %n=%0 TO %5: PROC blk(%x+n,%y+22-(4*n)): PROC blk(%x+n,%y+20-(4*n)): NEXT %n
8500 FOR %n=%0 TO %5: PROC blk(%x+8+n,%y+(4*n)): PROC blk(%x+8+n,%y+2+(4*n)): NEXT %n
8510 PROC longhblk(%x+6,%y+12,%5)
8520 ENDPROC 
8525 ;--------------------------
8530 DEFPROC tq(%x,%y)
8540 PROC longhblk(%x,%y,%16): PROC longvblk(%x+6,%y,%24)
8550 ENDPROC 
8555 ;--------------------------
8560 DEFPROC oq(%x,%y)
8565 LOCAL %n
8570 FOR %n=%0 TO %5: PROC blk(%x+n,%y+10-(2*n)): NEXT %n
8580 FOR %n=%0 TO %5: PROC blk(%x+n,%y+12+(2*n)): NEXT %n
8590 FOR %n=%0 TO %5: PROC blk(%x+8+n,%y+(2*n)): NEXT %n
8600 FOR %n=%0 TO %5: PROC blk(%x+8+n,%y+22-(2*n)): NEXT %n
8610 ENDPROC 
8615 ;--------------------------
8620 DEFPROC mq(%x,%y)
8625 LOCAL %n
8630 PROC longvblk(%x,%y,%24)
8640 FOR %n=%0 TO %5: PROC blk(%x+3+n,%y+(2*n)): NEXT %n
8650 FOR %n=%0 TO %5: PROC blk(%x+9+n,%y+10-(2*n)): NEXT %n
8660 PROC longvblk(%x+17,%y,%24)
8670 ENDPROC 
8675 ;--------------------------
8680 DEFPROC bq(%x,%y)
8685 LOCAL %n
8690 PROC longvblk(%x,%y,%24)
8700 FOR %n=%0 TO %3: PROC sideblk(%x+2+(3*n),%y+n): NEXT %n
8710 FOR %n=%0 TO %3: PROC sideblk(%x+2+(3*n),%y+9-n): NEXT %n
8720 FOR %n=%0 TO %3: PROC sideblk(%x+2+(3*n),%y+11+n): NEXT %n
8730 FOR %n=%0 TO %3: PROC sideblk(%x+2+(3*n),%y+20-n): NEXT %n
8740 ENDPROC 
8755 ;--------------------------
8760 DEFPROC sq(%x,%y)
8765 LOCAL %n
8770 FOR %n=%0 TO %5: PROC blk(%x+n,%y+10-(2*n)): NEXT %n: PROC longhblk(%x+8,%y,%4)
8780 FOR %n=%0 TO %5: PROC blk(%x+7+n,%y+22-(2*n)): NEXT %n: PROC longhblk(%x+4,%y+20,%4)
8790 PROC longhblk(%x,%y+10,%16)
8800 ENDPROC 
8805 ;--------------------------
8810 DEFPROC rq(%x,%y)
8815 LOCAL %n
8820 PROC longvblk(%x,%y,%24)
8830 FOR %n=%0 TO %3: PROC sideblk(%x+2+(3*n),%y+n): NEXT %n
8840 FOR %n=%0 TO %3: PROC sideblk(%x+2+(3*n),%y+9-n): NEXT %n
8850 FOR %n=%0 TO %5: PROC blk(%x+4+n,%y+12+(2*n)): NEXT %n
8860 ENDPROC 
8865 ;--------------------------
8870 DEFPROC fq(%x,%y)
8880 PROC longvblk(%x,%y,%24): PROC longhblk(%x+4,%y,%12): PROC longhblk(%x+4,%y+10,%8)
8890 ENDPROC 
8895 ;--------------------------
8900 DEFPROC nq(%x,%y)
8905 LOCAL %n
8910 PROC longvblk(%x,%y,%24): PROC longvblk(%x+13,%y,%24)
8920 FOR %n=%0 TO %5: PROC blk(%x+4+n,%y+(4*n)): PROC blk(%x+4+n,%y+2+(4*n)): NEXT %n
8930 ENDPROC 
8935 ;--------------------------
8940 DEFPROC titleq(%x,%y)
8950 PROC kq(%x,%y): PROC aq(%x+16,%y): PROC tq(%x+33,%y): PROC aq(%x+49,%y): PROC kq(%x+69,%y): PROC oq(%x+84,%y): PROC mq(%x+103,%y): PROC bq(%x+127,%y): PROC sq(%x+144,%y)
8960 PLOT %x+24,%y+30: DRAW %15,%0: DRAW %0,% SGN {-1}: DRAW % SGN {-15},%0: PLOT %x+24,%y+33: DRAW %15,%0: DRAW %0,%1: DRAW % SGN {-15},%0
8970 PLOT %x+64,%y+28: DRAW %7,%3: DRAW %0,%1: DRAW % SGN {-7},%3: DRAW % SGN {-1},%0: DRAW % SGN {-7},% SGN {-3}: DRAW %0,% SGN {-1}: DRAW %7,% SGN {-3}
8980 PLOT %x+64,%y+29: DRAW %6,%2: DRAW %0,%1: DRAW % SGN {-6},%2: DRAW % SGN {-1},%0: DRAW % SGN {-6},% SGN {-2}: DRAW %0,% SGN {-1}: DRAW %6,% SGN {-2}: PLOT %x+59,%y+31: DRAW %0,%1: PLOT %x+68,%y+31: DRAW %0,%1
8990 PLOT %x+103,%y+28: DRAW % SGN {-15},%0: DRAW %0,%7: DRAW %0,% SGN {-3}: DRAW %9,%0: PLOT %x+103,%y+29: DRAW % SGN {-14},%0: DRAW %0,%6: DRAW %0,% SGN {-2}: DRAW %8,%0
9000 PLOT %x+120,%y+30: DRAW %15,%0: DRAW %0,% SGN {-1}: DRAW % SGN {-15},%0: PLOT %x+120,%y+33: DRAW %15,%0: DRAW %0,%1: DRAW % SGN {-15},%0
9010 PROC kq(%x,%y+40): PROC aq(%x+16,%y+40): PROC kq(%x+36,%y+40): PROC rq(%x+52,%y+40): PROC aq(%x+68,%y+40): PROC fq(%x+88,%y+40): PROC oq(%x+105,%y+40): PROC oq(%x+124,%y+40): PROC nq(%x+143,%y+40)
9020 ENDPROC 
9025 ;--------------------------
9030 DEFPROC titlestripes()
9035 LOCAL %n
9040 FOR %n=%0 TO %255: PLOT %n,%0
9050 IF %n<=251 THEN PLOT %n+2,%2
9060 IF %n<=247 THEN PLOT %n+4,%4
9070 IF %n<=243 THEN PLOT %n+6,%6
9080 NEXT %n: FOR %n=%0 TO %191: PLOT %255,%n
9090 IF %n<=187 THEN PLOT %253,%n+2
9100 IF %n<=183 THEN PLOT %251,%n+4
9110 IF %n<=179 THEN PLOT %249,%n+6
9120 NEXT %n: FOR %n=%255 TO %0 STEP -1: PLOT %n,%191
9130 IF %n>=4 THEN PLOT %n-2,%189
9140 IF %n>=8 THEN PLOT %n-4,%187
9150 IF %n>=12 THEN PLOT %n-6,%185
9160 NEXT %n: FOR %n=%191 TO %0 STEP -1: PLOT %0,%n
9170 IF %n>=4 THEN PLOT %2,%n-2
9180 IF %n>=8 THEN PLOT %4,%n-4
9190 IF %n>=12 THEN PLOT %6,%n-6
9200 NEXT %n: INK %15
9210 ENDPROC 
9215 ;--------------------------
9220 DEFPROC hhggtheme()
9225 LOCAL a$,b$,c$,d$,e$,f$
9230 a$="O5V15N7_3#g3#f#g&9C": b$="3b&7#a3#g#fe#d#c&7#c3b&7#a3#g#f9e3b&7#a3#g#fe#d#c&7#c3e&7#f3e#d9#c"
9240 c$="O4V13N7_3E3EE&9#G": d$="3#F&7#F3E#D#Cba&7#g3#F&7#F3E#D9#C3#F&7#F3E#D#Cba&7#g3#C&7#D3#Cb9#g"
9250 e$="O3UX12000W0N7ee9#g": f$="(5#f8#f9#c)5#f8#f9#c5e7#f5e9#c"
9260 RUN AT %0: PLAY "T180"+a$+b$+b$,c$+d$+d$,e$+f$+f$: RUN AT %3
9270 ENDPROC 
9275 ;--------------------------
9280 DEFPROC hhggending()
9285 LOCAL a$,b$,c$,d$,e$,f$
9290 a$="O5UX12000W0N5#g#g#g8C": b$="5b#a3#g#fe#d#c6#c5b#a3#g#f8e5b#a3#g#fe#d#c6#c5e#fe8#c"
9300 c$="O4UW0N5EEE8#G": d$="5#F#F3E#D#Cba6#g5#F#F3E#D8#C5#F#F3E#D#Cba6#g5#C#D#C8#g"
9310 e$="O3UW0N5eee8#g": f$="(5#f7#f8#c)5#f7#f8#c5e#fe8#c"
9320 RUN AT %0: PLAY "T130"+a$+b$,c$+d$,e$+f$: RUN AT %3
9330 ENDPROC 
9335 ;--------------------------
9340 DEFPROC instruct()
9345 LOCAL %n,%m,%a,%b,%c,q$,%q,t$
9350 FOR %n=%9 TO %11: BANK %n COPY TO %n+35: NEXT %n: CLS 
9360 PRINT AT 0,0; CHR$ 30; CHR$ 8;
9365 %a=% REG 67: %b=% REG 64: %c=% REG 65
9370 LAYER %1,%2: CLS : REG %67,%64: REG %64,%31: REG %65,tr: LAYER OVER %2: LAYER PALETTE %1
9400 %q=%0: RESTORE %9601
9410 FOR %m=%1 TO %3
9420 FOR %n=0 TO %25: READ t$: PROC vp(t$): NEXT %n
9430 PROC vpwait()
9440 NEXT %m
9500 REG %67,%a: REG %64,%b: REG %65,%c
9510 LAYER %0: LAYER %2: LAYER OVER %0
9520 PALETTE CLEAR : PROC colsetup()
9530 SPRITE PALETTE %1 BANK %43,%16: SPRITE PALETTE %0 BANK %43,%0: SPRITE PRINT %1
9540 BORDER %0: PAPER %0: CLS : FOR %n=%9 TO %11: BANK %n+35 COPY TO %n: NEXT %n
9550 PRINT AT %0,%0; CHR$ 30; CHR$ 6;
9560 ENDPROC 
9601 DATA "","","*** KATAKOMBS OF KAKRAFOON - INSTRUCTIONS ***",""
9603 DATA "Encouraged by the success of Ford Prefect paying off"
9604 DATA "his gambling debts by raiding the Mines of Magrathea,"
9605 DATA "Zaphod Beeblebrox wants a piece of the action. However,"
9606 DATA "the Magratheans are now wise to the threat of wandering"
9607 DATA "degenerates swiping their riches while they sleep, and"
9608 DATA "have beefed up their defences to the point where landing"
9609 DATA "on Magrathea is somewhere close to impossible.",""
9611 DATA "Zaphod's attention turned to the desolate desert planet"
9612 DATA "of Kakrafoon. The telepathic Belcerebon people who live"
9613 DATA "there, forced to constantly natter about anything and"
9614 DATA "everything that crossed their minds lest they read their"
9615 DATA "neighbours' less-than-complimentary thoughts about each"
9616 DATA "other, have let it slip over the Sub-Etha Network that"
9617 DATA "their planet is heaving with precious gems.",""
9619 DATA "Zaphod being the totally awesome guy he is, has decided"
9620 DATA "it would be a really hoopy idea to help them dig through"
9621 DATA "the sand and retrieve a handful of those gems, in"
9622 DATA "particular the really shiny ones.",""
9624 DATA "PRESS ANY KEY FOR THE NEXT PAGE"
9625 DATA "","","In this game, as is as much of a surprise as the last"
9626 DATA "one (i.e. not at all), you control Zaphod Beeblebrox in"
9627 DATA "his quest to separate the Belcerebons from the sparkly"
9628 DATA "stones hiding in great plenty beneath the surface.",""
9630 DATA "Zaphod is motivated purely by greed, and as such he can"
9631 DATA "raid as many caverns as he wants, returning only to the"
9632 DATA "Heart Of Gold when he thinks he has enough to satisfy"
9633 DATA "his apparently limitless ego. Hence, there is no defined"
9634 DATA "end to the game - it is your job to rein him in and"
9635 DATA "leave Kakrafoon before it costs him his life.",""
9637 DATA "Zaphod will refuse to leave any cavern without at least"
9638 DATA "one gem in his hands - provided he survives!",""
9640 DATA "The Belcerebons have planted Magrathean disappearing"
9641 DATA "mines in their caverns, the number of which varies"
9642 DATA "according to the difficulty level. But there is a"
9643 DATA "further hazard - Kakrafoon is HOT, and Zaphod must make"
9644 DATA "sure he gets in and out of each cavern before he is"
9645 DATA "roasted alive. Once out, he can refresh himself with a"
9646 DATA "well-deserved Pan-Galactic Gargle Blaster.",""
9648 DATA "PRESS ANY KEY FOR THE NEXT PAGE"
9649 DATA "","","Fortunately, Zaphod has learned from Trillian to be"
9650 DATA "more prepared for un-hoopy situations than he once was.",""
9652 DATA "He has packed four portable Pan-Galactic Gargle Blasters"
9653 DATA "which can be used in an emergency if he can't get out of"
9654 DATA "a cavern in time. Press H to use one; how much his"
9655 DATA "temperature drops, both using one of these, and at the"
9656 DATA "end of a cavern, varies with the difficulty level.",""
9658 DATA "He also found two Extra-Groovy-Awesome Devices in the"
9659 DATA "Heart Of Gold's supply room. He doesn't know what they"
9660 DATA "do, only that they might be helpful. Press F to use one.",""
9662 DATA "Other than that, there are selectable keyboard and"
9663 DATA "joystick options. Don't moan about the action keys; they"
9664 DATA "have been chosen to never be pressed accidentally.",""
9666 DATA "Each of the four difficulty levels has its own high"
9667 DATA "score, which will be saved with the tile bank so they"
9668 DATA "will never be lost!","","*** MESSAGE ENDS ***",""
9672 DATA "PRESS ANY KEY TO RETURN TO THE MAIN SCREEN"
9695 ;--------------------------
9700 DEFPROC vp(x$)
9705 LOCAL %n,%p
9710 LAYER %2: LAYER PALETTE %1
9720 PRINT PAPER %7+(5*(q&1)); INK %0; AT %23,%0; CHR$ 26; CHR$ 255; CHR$ 7;"                              ";: BEEP .1,-28: BEEP .1,-28: BEEP .1,-28
9730 LAYER %1,%2: PRINT AT %23,%0; CHR$ 26; CHR$ 255; CHR$ 7; TAB %4;
9740 FOR n=%1 TO LEN x$: PRINT x$(n);: BEEP .05,-36: FOR %p=%1 TO 50*de: NEXT %p: NEXT n
9750 %q=%q+1
9760 ENDPROC 
9765 ;--------------------------
9770 DEFPROC vpwait()
9780 REPEAT : REPEAT UNTIL INKEY$ <>""
9785 ENDPROC 
